
// step 1# 定义二叉树结构体
typedef struct TreeNode TreeNode;

// step 2# 计算最小深度的辅助函数
int getDepth(TreeNode* node) {
    if (node == NULL) return 0;

    int leftDepth = getDepth(node->left);     // 左子树深度
    int rightDepth = getDepth(node->right);   // 右子树深度

    // 如果左子树为空，右子树不为空，不取最小，取右子树深度
    if (node->left == NULL && node->right != NULL) {
        return 1 + rightDepth;
    }

    // 如果右子树为空，左子树不为空，不取最小，取左子树深度
    if (node->left != NULL && node->right == NULL) {
        return 1 + leftDepth;
    }

    // 正常情况：左右子树都不为空，取较小值
    return 1 + (leftDepth < rightDepth ? leftDepth : rightDepth);
}

// step 3# 主函数：返回整棵树的最小深度
int minDepth(TreeNode* root) {
    return getDepth(root);
}
